package com.woniu.microchargeserver.common.configure;

import com.woniu.microchargeserver.common.util.StringToDateConverter;
import org.springframework.boot.web.servlet.MultipartConfigFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.format.FormatterRegistry;
import org.springframework.util.unit.DataSize;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import javax.servlet.MultipartConfigElement;

/**配置数据类型转换、文件上传...
 * @author hejie
 */
@Configuration
public class SpringMVCConfigure implements WebMvcConfigurer {

    /**
     * 跨域支持 （别人从别的服务器发 请求过来）——已经在zuul微服务中配置过了，就不用在其他微服务一一配置
     * @param registry
     */
    /*@Override
    public void addCorsMappings(CorsRegistry registry) {
        //跨域访问：
        registry.addMapping("/**").
                allowedOrigins("*").//允许 所有的请求
                allowCredentials(true).//允许 做身份认证
                allowedMethods("GET","POST","PUT","DELETE");//允许的 跨域请求类型
    }*/


    /**
     * 文件上传配置  （版本“creditsystem0.4.3”，我没有配置它，也可以上传excel文件做  用户账号的批量导入）
     * @author hejie
     * @return
     */
    @Bean
    public MultipartConfigElement multipartConfigElement() {
        MultipartConfigFactory factory = new MultipartConfigFactory();
        //文件最大10MB
        factory.setMaxFileSize(DataSize.ofMegabytes(10)); //KB,MB
        /// 设置总上传数据总大小100MB
        factory.setMaxRequestSize(DataSize.ofMegabytes(100));
        return factory.createMultipartConfig();
    }

    /**
     * 数据类型转换（前端输入<input type="date">的日期，转为后端能用的Date对象；  或者前端使用<input type="text"并且输入2020/12/02这样的格式，不需要自己配置此转换器就能自动转换）
     * @author hejie
     * @param registry
     */
    @Override
    public void addFormatters(FormatterRegistry registry) {
        registry.addConverter(stringToDateConverter());
    }

    /**
     * @Bean：用于将组件的实例，装配到Spirng容器中
     * 方法的方法名：StringToDateConverter作为容器的ID
     * @author hejie
     * @return
     */
    @Bean
//    @Scope
    public StringToDateConverter stringToDateConverter(){
        return new StringToDateConverter();
    }


}
